class Solution {
    static constexpr string R[4][10] = {
        // 根据题意，从千位数到个位数，阿拉伯数字与罗马数字的转换关系为：
        // 千位从 1 到 3 依次为 M,MM,MMM。
        // 百位从 1 到 9 依次为 C,CC,CCC,CD,D,DC,DCC,DCCC,CM。
        // 十位从 1 到 9 依次为 X,XX,XXX,XL,L,LX,LXX,LXXX,XC。
        // 个位从 1 到 9 依次为 I,II,III,IV,V,VI,VII,VIII,IX。
        {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}, // 个位
        {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}, // 十位
        {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}, // 百位
        {"", "M", "MM", "MMM"}, // 千位
    };
public:
    string intToRoman(int num) {
        // 个位：num / 1 % 10 == num % 10
        // 十位：num / 10 % 10
        // 百位：num / 100 % 10
        // 千位：num / 1000
        return R[3][num / 1000] + R[2][num / 100 % 10] + R[1][num / 10 % 10] + R[0][num % 10];
    }
};